<?php
/**
 * 微信小程序消息推送处理
 * 处理JSON格式的消息推送
 */

// 设置响应头
header('Content-Type: application/json; charset=utf-8');

// 引入配置
$config = require_once __DIR__ . '/../config/wechat.php';

// 获取Token配置
$token = $config['message']['token'] ?? 'order2024token123';
$encoding_aes_key = $config['message']['encoding_aes_key'] ?? '';

// 获取微信发送的参数
$signature = $_GET['msg_signature'] ?? '';
$timestamp = $_GET['timestamp'] ?? '';
$nonce = $_GET['nonce'] ?? '';

// 获取POST数据
$post_data = file_get_contents('php://input');
$data = json_decode($post_data, true);

// 记录消息日志
$log_data = [
    'time' => date('Y-m-d H:i:s'),
    'signature' => $signature,
    'timestamp' => $timestamp,
    'nonce' => $nonce,
    'post_data' => $post_data,
    'parsed_data' => $data
];

// 写入日志文件
$log_file = __DIR__ . '/../storage/logs/wechat_message.log';
$log_dir = dirname($log_file);
if (!is_dir($log_dir)) {
    mkdir($log_dir, 0755, true);
}
file_put_contents($log_file, json_encode($log_data, JSON_UNESCAPED_UNICODE) . "\n", FILE_APPEND);

// 验证签名（如果需要）
if (!empty($signature)) {
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode($tmpArr);
    $tmpStr = sha1($tmpStr);
    
    if ($tmpStr != $signature) {
        http_response_code(403);
        echo json_encode(['code' => 1, 'message' => '签名验证失败']);
        exit;
    }
}

// 处理不同类型的消息
if (isset($data['MsgType'])) {
    switch ($data['MsgType']) {
        case 'text':
            // 处理文本消息
            $response = handleTextMessage($data);
            break;
        case 'event':
            // 处理事件消息
            $response = handleEventMessage($data);
            break;
        default:
            // 其他类型消息
            $response = ['code' => 0, 'message' => '消息已接收'];
    }
} else {
    $response = ['code' => 0, 'message' => '消息已接收'];
}

// 返回响应
echo json_encode($response, JSON_UNESCAPED_UNICODE);

/**
 * 处理文本消息
 */
function handleTextMessage($data) {
    $content = $data['Content'] ?? '';
    
    // 这里可以添加您的业务逻辑
    // 例如：关键词回复、自动回复等
    
    return [
        'code' => 0,
        'message' => '文本消息已处理',
        'content' => $content
    ];
}

/**
 * 处理事件消息
 */
function handleEventMessage($data) {
    $event = $data['Event'] ?? '';
    
    switch ($event) {
        case 'subscribe':
            // 用户关注事件
            return ['code' => 0, 'message' => '用户关注事件已处理'];
        case 'unsubscribe':
            // 用户取消关注事件
            return ['code' => 0, 'message' => '用户取消关注事件已处理'];
        default:
            // 其他事件
            return ['code' => 0, 'message' => '事件已处理', 'event' => $event];
    }
}
